<?php
/**
 * Created by PhpStorm.
 * User: 链金锁
 * Date: 2016/11/30
 * Time: 11:00
 */
namespace App\Http\Controllers;
//use App\Member;
//use App\User;
//use App\Userinfo;
use Illuminate\Support\Facades\DB;

class IndexController extends  Controller{
    public function index()
    {
	    return view('Index/index');
    }
//Facade之curd操作
    public function db_curd()
    {
//        查询
//        $userinfo= DB::select('select * from tr_userinfo');
//        返回值 改变的行数（更新）
//        $update=DB::update('update tr_userinfo set username="玉坤" where tel="17778050771"');
//        返回值 改变的行数（删除）
//        $delete=DB::delete("delete from tr_userinfo where uid >=?",[135]);
//        返回值bool类型（插入）
//        $insert=DB::insert("insert into tr_userinfo(tel,password) VALUES (?,?)",['17778212311',md5(123456)]);
    }
//查询构造器之插入
    public function insert()
    {
//        增加返回值bool类型
//       $bool= DB::table("tr_userinfo")->insert(
//            array('username'=>'username','tel'=>'17772828191','password'=>md5('123456'))
//        );
        //获取增加的id 返回值增加的id
//        $id=DB::table('tr_userinfo')->insertGetId(
//            array('username'=>'新增','tel'=>'177728211231','password'=>md5('123456'))
//        );
//        插入多条数据（返回值bool类型）
        $result=DB::table('tr_userinfo')->insert([
            ['username'=>'多1','tel'=>'17772828191','password'=>md5('123456')],
            ['username'=>'多2','tel'=>'17772828192','password'=>md5('123456')]
        ]);
        dd($result);
    }
    //查询构造器之更新
    public function update()
    {
        //返回值影响的行数
//        $update=DB::table('tr_userinfo')->where('uid','138')->update(
//            ['username'=>'更新']
//        );
//        自增默认自增1 返回值影响行数 @自减decrement()同自增一致
//        $update=DB::table('tr_userinfo')->where('uid',138)->increment('yue');
//        $update=DB::table('tr_userinfo')->where('uid',138)->increment('yue',3);
//        自增自减同时修改其他字段返回值影响行数
        $update=DB::table('tr_userinfo')
            ->where('uid',138)
            ->increment('yue',3,['username'=>'imooc']);
        dd($update);
    }
    //查询构造器之删除
    public function delete()
    {
//        返回值受影响的行数
//        $delete=DB::table('tr_userinfo')
//            ->where('uid',138)
//            ->delete();
//        $delete=DB::table('tr_userinfo')
//            ->where('uid','>=',140)
//            ->delete();
        //清空表没有返回值
        $delete=DB::table('tr_userinfo')->truncate();

        dd($delete);
    }
    //查询构造器之查询
    public function select()
    {
//        返回值是多条数剧(get)
//        $select=DB::table('tr_userinfo')->get();
//        多条件查询
//        $select=DB::table('tr_userinfo')
//            ->whereRaw('uid>? and rstatus = ?',['50',1])
//            ->get();
//        返回一条数据(first)
//        $select=DB::table('tr_userinfo')
//            ->orderBy('uid','asc')
//            ->first();
        //查询返回指定单个字段(pluck)
//          $select=DB::table('tr_userinfo')
//            ->whereRaw('uid>? and rstatus = ?',['50',1])
//            ->pluck('uid');//教学中说与lists有区别本人测试未发现区别
//        查询返回指定单个字段(lists)查找tel指定uid作为key
//        $select=DB::table('tr_userinfo')
//            ->whereRaw('uid>? and rstatus = ?',['50',1])
//            ->lists('tel','uid');
//        查询返回指定多个字段（select）相当于tp中field();
//        $select=DB::table('tr_userinfo')
//            ->select('uid','tel')
//            ->get();
//      如果您需要与成千上万的数据库记录工作，
//      考虑使用chunk方法。这种方法在一个时间检索结果的小“块”，
//      并供给各组块为一个Closure进行处理。
//      这种方法是编写非常有用的工匠命令的处理数以千计的记录。
//      例如，让我们与整个工作表中的100条记录在一个时间块表：
        $select=DB::table('tr_userinfo')
            ->chunk('3',function ($arr){
                echo '<pre>';
                print_r($arr);
                echo '<pre>';
            });
//        dd($select);
    }
//查询构造器之聚合函数count() max() min() avg() sum()
    public function mash()
    {
        //查询条数
        $mash=DB::table('tr_userinfo')->count();
        $max=DB::table('tr_userinfo')->max('uid');
        $min=DB::table('tr_userinfo')->min('uid');
        $avg=DB::table("tr_userinfo")->avg('uid');
        $sum=DB::table("tr_userinfo")->sum('uid');
        echo "总数:".$mash."最大值：".$max."最小值：".$min."平均值：".$avg."总和：".$sum;

    }
//数据库操作 Eloquent ORM 是真正体现Laravel“优雅”的设计，是“让开发者真正关注业务而不是底层代码”的集中体现之一！
    public function Orm()
    {
     //查询所有
        $all=Userinfo::all();
        //根据主键查询
        $find=Userinfo::find(10023);
        $time=Userinfo::select('createtime')->find(10023);
        //根具主键查找findOrFail如果未找到抛出异常
        $findOrFail=Userinfo::findOrFail(10023);
        //查询所有
        $get=Userinfo::get();
        //查询一条
        $first=Userinfo::where('uid','>',10000)
            ->orderBy('uid','asc')->first();
        //chunk:一次查询几条
        Userinfo::where('uid','>',1)
            ->chunk(2,function ($chunk){
                echo '<pre>';
                print_r($chunk);
            });
//        dd($first);
    }
//Orm之聚合函数
    public function OrmMash()
    {
        //查询总数
        $count=Userinfo::count();
        //查询最大数
        $max=Userinfo::max('uid');
        //查询最小
        $min=Userinfo::min('uid');
        //查询平均值avg
        $avg=Userinfo::avg('uid');
        //求和
        $sum=Userinfo::sum('uid');
        return "总数:".$count."最大值：".$max."最小值：".$min."平均值：".$avg."总和：".$sum;
    }
//Orm之新增
    public function OrmInsert()
    {
//        通过模型添加
//        $Userinfo=new Userinfo();
//        $Userinfo->tel='15545759391';
//        $Userinfo->password=md5('123456');
//        $Userinfo->username='王liu';
//        $Userinfo->save();
//          $user=Userinfo::find(10023);
        //如果存在created_at  $user->created_at:为格式化时间 若不想格式化
//        可以再模型中配置  protected function  asDateTime($val){return $val;}
//         $time=$user->createtime;
//         return date("Y:m:d H:i:s",$time);

        //使用模型的create新增返回值是新增数组
//        $return=Userinfo::create([
//            'tel'=>'13351618833',
//            'password'=>md5(123456),
//            'username'=>'张三'
//            ]);
//        firstOrCreate():以属性查找如果没有则新增
//        该firstOrNew方法一样，firstOrCreate将尝试在数据库中找到匹配给定属性的记录。
//        但是，如果没有找到一个模式，一个新的模型实例将被退回。请注意，
//        由返回的模型firstOrNew尚未持久化到数据库中。您将需要调用save：
        $firstOrCreate=Userinfo::firstOrCreate([
            'username'=>'张三1'
        ]);
        dd($firstOrCreate);
    }
//Orm更新修改数据
    public function OrmUpdate()
    {
        //通过模型来更新
//        $User=Userinfo::find(10023);
//        $User->realname='laravel';
//        $bool=$User->save();
        //通过模型方法update(array)更新返回值受影响的行数
       $num= Userinfo::where('uid','>=','10023')->update([
            'username'=>'shirt'
        ]);
        echo $num;
    }
    //Orm删除
    public function Ormdelete()
    {
//        通过模型删除
//        $User=Userinfo::find(10024);
//        $bool=$User->delete();
//        var_dump($bool);
//        通过主键删除返回为删除可多少条记录
//        $num=Userinfo::destroy(10027,10028);//可以传数组
//        删除指定条件的数据返回为删除可多少条记录
        $num=Userinfo::where('uid','<=','219')
            ->delete();
        echo $num;
    }
//blade模板
    public function blade()
    {
        $Userinfo=Userinfo::where('uid','>=','219')->get();
        $name='sean1';
        $arr=['rose','jack'];
        return view('Index.blade',['name'=>$name,'arr'=>$arr,'Userinfo'=>$Userinfo]);
    }

    public function urlTest()
    {
        return 'urlTest';
    }
}
